--1.参数列表
--1.1 优惠卷 ID
local voucherId = ARGV[1]
--1.2 用户 ID
local userId = ARGV[2]
--1.3 订单id
local orderId = ARGV[3]

--2 数据key
--2.1 库存 key
local stockKey = "seckill:stock:" .. voucherId
--2.2 订单key
local orderKey = "seckill:order:" .. voucherId

--3.脚本业务
--3.1 判断库存是否充足
if (tonumber(redis.call("get", stockKey)) <= 0) then
    --库存不足
    return 1
end
--3.2 判断用户是否重复下单
if (redis.call("sismember", orderKey, userId) == 1) then
    --用户重复下单
    return 2
end
--3.3 扣减库存
redis.call("incrby", stockKey, -1)
--3.4 下单
redis.call("sadd", orderKey, userId)
--3.6 发送消息到队列 XADD stream.orders * userId userId voucherId voucherId orderId orderId
redis.call("xadd", "stream.orders", "*", "userId", userId, "voucherId", voucherId, "id", orderId)
return 0
